/**
 * 地图服务工具类
 * 提供逆地理编码等功能
 */

// 腾讯地图API配置
const TENCENT_MAP_CONFIG = {
	key: 'XA5BZ-3JIKJ-LHXFX-XAHBN-M7HWV-64BMN', // 与manifest.json中的key保持一致
	baseUrl: 'https://apis.map.qq.com/ws/geocoder/v1/'
};

/**
 * 逆地理编码 - 将经纬度转换为地址
 * @param {number} latitude 纬度
 * @param {number} longitude 经度
 * @returns {Promise} 返回地址信息
 */
export function reverseGeocode(latitude, longitude) {
	return new Promise((resolve, reject) => {
		// 腾讯地图API的location参数格式：纬度,经度
		const url = `${TENCENT_MAP_CONFIG.baseUrl}?location=${latitude},${longitude}&key=${TENCENT_MAP_CONFIG.key}&get_poi=1&poi_options=radius=500;page_size=5`;
		
		console.log('逆地理编码请求URL:', url);
		
		uni.request({
			url: url,
			method: 'GET',
			success: (res) => {
				console.log('逆地理编码API响应:', res.data);
				
				if (res.data.status === 0) {
					const result = res.data.result;
					let address = result.address;
					let nearbyInfo = '';
					
					// 处理附近500米内的POI信息
					if (result.pois && result.pois.length > 0) {
						const poi = result.pois[0];
						// 优先使用最近的POI
						if (poi.distance && poi.distance <= 500) {
							nearbyInfo = poi.title;
							// 如果有具体地址，组合使用
							if (poi.address) {
								address = `${poi.title}附近 (${poi.address})`;
							} else {
								address = `${poi.title}附近`;
							}
						}
					}
					
					// 如果没有找到附近的POI，使用详细地址
					if (!nearbyInfo && result.formatted_addresses) {
						const recommend = result.formatted_addresses.recommend;
						const rough = result.formatted_addresses.rough;
						address = recommend || rough || result.address;
					}
					
					resolve({
						success: true,
						address: address,
						formattedAddress: result.formatted_addresses?.recommend || address,
						pois: result.pois || [],
						nearbyInfo: nearbyInfo,
						coordinate: {
							latitude: latitude,
							longitude: longitude
						}
					});
				} else {
					console.log('API返回错误:', res.data);
					// API返回错误
					resolve({
						success: false,
						address: `经度:${longitude.toFixed(6)}, 纬度:${latitude.toFixed(6)}`,
						error: res.data.message || '逆地理编码失败'
					});
				}
			},
			fail: (err) => {
				console.log('逆地理编码请求失败:', err);
				// 网络请求失败，返回默认格式
				resolve({
					success: false,
					address: `经度:${longitude.toFixed(6)}, 纬度:${latitude.toFixed(6)}`,
					error: '网络请求失败'
				});
			}
		});
	});
}

/**
 * 获取当前位置
 * @returns {Promise} 返回位置信息
 */
export function getCurrentLocation() {
	return new Promise((resolve, reject) => {
		uni.getLocation({
			type: 'gcj02',
			altitude: false,
			geocode: true,
			success: (res) => {
				console.log('定位成功:', res);
				resolve({
					success: true,
					latitude: res.latitude,
					longitude: res.longitude,
					address: res.address || '未知地址'
				});
			},
			fail: (err) => {
				console.log('获取位置失败:', err);
				// 定位失败时返回默认位置（焦作市）
				resolve({
					success: false,
					latitude: 35.2159,
					longitude: 113.2418,
					address: '焦作市',
					error: err.errMsg || '获取位置失败'
				});
			}
		});
	});
}

/**
 * 计算两点间距离（米）
 * @param {number} lat1 第一个点纬度
 * @param {number} lng1 第一个点经度
 * @param {number} lat2 第二个点纬度
 * @param {number} lng2 第二个点经度
 * @returns {number} 距离（米）
 */
export function calculateDistance(lat1, lng1, lat2, lng2) {
	const R = 6371000; // 地球半径（米）
	const dLat = (lat2 - lat1) * Math.PI / 180;
	const dLng = (lng2 - lng1) * Math.PI / 180;
	const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
		Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
		Math.sin(dLng / 2) * Math.sin(dLng / 2);
	const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
	return R * c;
}
